package com.jt.controller;

import com.jt.pojo.User;
import com.jt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
//@CrossOrigin("http://baidu.com")    //只允许百度进行访问.
@CrossOrigin    //任意网址都可以跨域访问
public class UserController {

    @Autowired
    private UserService userService;

    //需求:利用MP查询demo_user全部数据 /findAll
    @RequestMapping("/findAll")
    public List<User> findAll(){

        return userService.findAll();
    }

    /**
     * 业务: 根据id查询数据库
     * 请求类型: get请求
     * 请求路径: http://localhost:8090/getUserById?id=1
     * 请求参数: id=1
     * 返回值结果: User对象
     * MVC: 接收参数名称必须与传递参数的名称一致
     */
    @GetMapping("getUserById")  //只允许get请求类型访问
    @PostMapping("")
    @PutMapping("")
    @DeleteMapping("")
    public User getUserById(Integer id){

        return userService.getUserById(id);
    }

    /**
     * 业务: 根据name/sex查询数据
     * 请求类型: get请求
     * 请求路径: http://localhost:8090/getUserByNS
     * 请求参数: user对象方式
     * 返回值结果: List<User>
     * 数据?name=xx&sex=xx
     */
    @GetMapping("getUserByNS")
    public List<User> getUserByNS(User user){

        return userService.getUserByNS(user);
    }

    /**
     * 业务: 利用restFul风格,查询name包含"君"的数据
     * 请求类型: get请求
     * 请求路径: "http://localhost:8090/user/君"
     * 请求参数: name like '%君%'
     * 返回值结果: List<User>
     * RestFul参数接收:
     *      1. 多个参数使用/分割
     *      2. 接参使用特定注解 @PathVariable
     *      3. 参数使用{}形式包裹
     */
    @GetMapping("/user/{name}")
    public List<User> getUserByName(@PathVariable
                                                String name){
        return userService.getUserByName(name);
    }
    //简化:restFul风格2 查询name="精" sex="女"
    //如果参数有多个,则可以使用对象封装. 要求参数名称与属性一致
    @GetMapping("/user/{name}/{sex}")
    public List<User> getUserByNS(){
        return null;
    }

    /**
     * 业务: 根据name删除数据
     * 请求类型: get请求
     * 请求路径: http://localhost:8090/deleteUserByN
     * 请求参数: user对象方式
     * 返回值结果: 删除数据成功
     * 数据?name=xx
     */
    @DeleteMapping("deleteUserByName")
    public String deleteUserByName(User user){
        userService.deleteUserByName(user);
        return "删除数据成功";
    }

    /**
     * 业务: 利用restFul风格,删除name="xxx" sex="xxx"的数据
     * 请求类型: delete
     * 请求路径: "http://localhost:8090/user/宵夜吃什么/男"
     * 请求参数: name="宵夜吃什么" sex="男"
     * 返回值结果: 删除数据成功
     */
    @DeleteMapping("/user/{name}/{sex}")
    public String deleteUserByNS(User user){
        userService.deleteUserByNS(user);
        return "删除数据成功!!";
    }

    @DeleteMapping("/user/{id}")
    public String deleteUserById(@PathVariable Integer id){
        userService.deleteUserById(id);
        return "数据删除成功";
    }

    /**
     * 需求: 完成用户入库操作
     * URL: http://localhost:8090/saveUser
     * 参数: 对象的JSON串
     * 类型: POST
     * 返回值: String
     * 难点: 如何将JSON串转化为User对象
     * SpringMVC: 针对JSON转化为对象 开发2个注解
     *            1.@ResponseBody 将对象转化为JSON串
     *            2.@RequestBody  将JSON串转化为对象
     */
    @PostMapping("saveUser")
    public String saveUser(@RequestBody User user){
        userService.saveUser(user);
        return "数据新增成功";
    }

    //用户新增restFul风格
    @PostMapping("/user/{name}/{age}/{sex}")
    public String saveUser2(User user){
        userService.saveUser(user);
        return "新增用户成功";
    }
    /**
     * 实现用户列表修改操作
     * url地址: /updateUser
     * 参数:   js对象 对象的json串
     * 返回值: String
     */
    @PutMapping("/updateUser")
    public String updateUser(@RequestBody User user){

        userService.updateUser(user);
        return "用户修改成功!!!";
    }























}
